﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SISLOG.BusinessEntities;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.Unity;
using System.Data.Common;
using System.Data;

namespace SISLOG.DataAccess
{
    public class DetalleOrdenPedidoDAO : MasterDAEL, IDetalleOrdenPedidoDAO
    {
        [Dependency]
        public IMaterialDAO MaterialDAO { get; set; }

        public List<DetalleOrdenPedido> GetFromDetalleOrdenPedidoByOrdenId(int idOrdenPedido)
        {
            var rowMapper = MapBuilder<DetalleOrdenPedido>
                            .MapAllProperties()
                            .DoNotMap(p => p.CodigoLabel)
                            .Map(p => p.Material)
                            .WithFunc(p => MaterialDAO.GetAllFromMaterialByIdMaterial(p.GetInt32(p.GetOrdinal("idMaterial"))))
                            .Build();

            var query = dbSisLog.ExecuteSprocAccessor<DetalleOrdenPedido>("GetFromDetalleOrdenPedidoByOrdenId", rowMapper, idOrdenPedido);
            return query.ToList();
        }

        public void RegistrarDetalleOrdenPedido(List<DetalleOrdenPedido> detalle, int idOrdenPedido)
        {
            foreach (var item in detalle)
            {
                item.idOrdenPedido = idOrdenPedido;
                RegistrarDetalleOrdenPedido(item);
            }
        }

        public void RegistrarDetalleOrdenPedido(DetalleOrdenPedido detalle)
        {
            DbCommand command = dbSisLog.GetStoredProcCommand("RegistrarDetalleOrdenPedido");

            dbSisLog.AddInParameter(command, "item", DbType.Int32, detalle.idDetalleOrdPedido);
            dbSisLog.AddInParameter(command, "idMaterial", DbType.Int32, detalle.idMaterial);
            dbSisLog.AddInParameter(command, "idOrdenPedido", DbType.Int32, detalle.idOrdenPedido);
            dbSisLog.AddInParameter(command, "descripcion", DbType.String, detalle.descripcion);
            dbSisLog.AddInParameter(command, "estado", DbType.Int32, detalle.estado);
            dbSisLog.AddInParameter(command, "cantidad", DbType.Int32, detalle.cantidad);

            dbSisLog.ExecuteNonQuery(command);
        }

        public void EliminarDetalle(int item)
        {
            throw new NotImplementedException();
        }       
    }
}
